package com.yuanqi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanqi.dto.SalesReturnOrderDTO;
import com.yuanqi.dto.SalesReturnOrderQueryDTO;
import com.yuanqi.pojo.SalesReturnOrder;

import java.util.List;

/**
 * 销售退货订单Service接口
 */
public interface SalesReturnOrderService {

    /**
     * 新增退货订单
     * @param returnOrderDTO 退货订单信息
     * @return 退货订单ID
     */
    Long addReturnOrder(SalesReturnOrderDTO returnOrderDTO);

    /**
     * 删除退货订单
     * @param id 退货订单ID
     * @return 是否成功
     */
    boolean deleteReturnOrder(Long id);

    /**
     * 更新退货订单
     * @param returnOrderDTO 退货订单信息
     * @return 是否成功
     */
    boolean updateReturnOrder(SalesReturnOrderDTO returnOrderDTO);

    /**
     * 根据ID查询退货订单详情
     * @param id 退货订单ID
     * @return 退货订单详情
     */
    SalesReturnOrderDTO getReturnOrderDetail(Long id);

    /**
     * 分页查询退货订单
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    IPage<SalesReturnOrderDTO> getReturnOrderPage(SalesReturnOrderQueryDTO queryDTO);

    /**
     * 提交审核
     * @param id 退货订单ID
     * @return 是否成功
     */
    boolean submitForAudit(Long id);

    /**
     * 审核退货订单
     * @param id 退货订单ID
     * @param auditResult 审核结果：0驳回 / 1通过
     * @param auditOpinion 审核意见
     * @param auditorId 审核人ID
     * @return 是否成功
     */
    boolean auditReturnOrder(Long id, Integer auditResult, String auditOpinion, Long auditorId);

    /**
     * 完成退货订单
     * @param id 退货订单ID
     * @return 是否成功
     */
    boolean completeReturnOrder(Long id);

    /**
     * 根据原销售订单ID查询退货单列表
     * @param orderId 原销售订单ID
     * @return 退货单列表
     */
    List<SalesReturnOrder> getReturnOrdersByOrderId(Long orderId);

    /**
     * 生成退货单编号
     * @return 退货单编号
     */
    String generateReturnNo();

    /**
     * 检查退货单是否可以删除
     * @param id 退货单ID
     * @return 是否可以删除
     */
    boolean canDelete(Long id);

    /**
     * 检查退货单是否可以编辑
     * @param id 退货单ID
     * @return 是否可以编辑
     */
    boolean canEdit(Long id);
}




